/**
 * 高阶函数
 */

// 函数作为返回值

function makeFn (): () => void {
  let msg = 'Hello fp'
  return function () {
    console.log(msg)
  }
}

// const fn = makeFn()
// fn()

// makeFn()()

// 返回只执行一次的函数
// 如支付场景下使用
function once (fn: (arg: any) => any): (args: any) => any {
  let done = false
  return function (...args: any []) {
    if (!done) {
      done = true
      fn.apply(this, args)
    }
  }
}

const pay = once (money => {
  console.log(`支付：${money} RMB`)
})

pay(100)
pay(100)
pay(100)

